package com.itheima.d2_reflect;

import org.junit.Test;
/**
 * 案例：使用反射技术：设计一个保存对象的简易版框架。
 * 反射做通用框架
 * 需求
 * 给你任意一个对象，在不清楚对象字段的情况可以，可以把对象的字段名称和对应值存储到文件中去。
 * 实现步骤：
 * 定义一个方法，可以接收任意类的对象。
 * 每次收到一个对象后，需要解析这个对象的全部成员变量名称。
 * 这个对象可能是任意的，那么怎么样才可以知道这个对象的全部成员变量名称呢？
 * 使用反射获取对象的Class类对象，然后获取全部成员变量信息。
 * 遍历成员变量信息，然后提取本成员变量在对象中的具体值
 * 存入成员变量名称和值到文件中去即可。
 *
 *
 * 反射的作用：
 * 1.可以在运行时得到一个类的全部成分然后操作。
 *   比如说idea写代码的时候，new的对象s想要调用自己的study方法，按个s.s就有方法的提示，这就是通过反射把这个对象的类中的信息都获取出来了
 * 2.可以破坏封装性。（很突出）
 * 3.也可以破坏泛型的约束性。（很突出）
 * 4.更重要的用途是适合：做Java高级框架
 *   基本上主流框架都会基于反射设计一些通用技术功能。
 */
public class Test5Frame {
    @Test
    public void save() throws Exception {
        Student s1 = new Student("黑马吴彦祖", 45, '男', 185.3, "蓝球，冰球，阅读");
        Teacher t1 = new Teacher("播妞", 999.9);

        // 需求：把任意对象的字段名和其对应的值等信息，保存到文件中去。
        ObjectFrame.saveObject(s1);
        ObjectFrame.saveObject(t1);
    }
}
